/*
 * UMuxerWriter.h
 *
 *  Created on: 2020年7月18日
 *      Author: terry
 */

#ifndef UMUXERWRITER_H_
#define UMUXERWRITER_H_

#include "UMediaWriter.h"
#include "UMediaMuxer.h"
#include <memory>
#include <atomic>
#include "TFileWriter.h"


typedef std::shared_ptr< UMediaMuxer >  UMediaMuxerPtr;


class UMuxerWriter: public UMediaWriter
{
public:
	explicit UMuxerWriter(int fileFormat, UMediaMuxerPtr muxer);
	virtual ~UMuxerWriter();

	virtual bool open(const char* filename, const UMediaFormat& fmt);

	virtual void close();

	virtual bool isOpen();

	virtual bool getFormat(UMediaFormat& fmt);

    virtual bool write(UMediaPacket& pkt);

    /**
     * 设置输出文件路径. 可用于切换录像
     * @param filepath	文件路径
     * @return true 表示成功
     */
    virtual bool setFile(const char* filepath);

    virtual int getFileFormat();

protected:
    void onMuxerPacket(UMediaPacket& pkt);

    bool doOpen(const char* filepath);
    void doClose();

protected:
    int     m_fileFormat;
    UMediaMuxerPtr m_muxer;
    UMediaFormat    m_format;

    comn::FileWriter    m_fileWriter;
    std::atomic_bool    m_opened;

};

#endif /* UMUXERWRITER_H_ */
